開始記錄寫Leetcode的過程
今天是紀錄的Day1,其實已經寫幾天的leetcode了
leetcode的第一題Two Sum:given an array of integers nums and integer target
return indices of the two numbers such that add up to target.
給定一個陣列nums和整數target回傳nums中相加起來等於target的元素的兩個索引值
範例:input:nums = [2,7,11,15] , target = 9
output:[0,1]
explanation:nums[0]+nums[1]=9,所以回傳[0,1]
最直接想到的解法就是用巢狀迴圈(Nested loop)遍歷整個nums找出所有可能
這樣的執行效率較差
第二種解法
1.建立一個dictionary
2.使用enumerate同時取得索引和元素
3.算出取得的元素和target的差
4.如果算出的差在dic裡就代表找到兩個索引值並回傳
5.如果沒有找到就把元素和對應索引存入dic
用範例假設第一次執行(i=0,num=2):
complement = 9 - 2 = 7, 7不存在dic裡所以存入,此時dic={2:0}
第二次執行(i=1,num=7)
complement = 9 - 7 = 2, 找到2在dic裡,回傳[num_dict[2], 1]也就是[0, 1],這樣就找到我們要的兩個索引值了